Sistemas de paginação são muito usados. Já existem muitos exemplos por aí, tanto em formato de artigos/tutoriais, quanto scripts prontos. Por isso, hoje não vou me ater nas técnicas de realização desse processo. Pretendo mostrar como criar os links para cada página, semelhantemente à maneira usada pelo Google, em que aparecem somente alguns links, para evitar que se mostre uma linha muito extensa.
Estou considerando que o leitor já sabe como fazer paginação. Se não sabe, é bom ler artigos sobre isso antes de continuar com este tutorial. =P
Usarei variáveis com valores estátiocs, somente para mostrar a lógica da coisa. Claro que você usará os valores gerados pelo seu sistema de paginação.
A variável “total” contém o número total de páginas (não de registros) retornadas pela paginação.
1 2 | // total de páginas $total = 50; |
A variável “max_links” armazena o número máximo de links que serão mostrados.
1 2 | // número máximo de links da paginação $max_links = 10; |
A variaável “pagina” contém o valor da página corrente. Esse é o valor que virá da URL.
1 2 | // página corrente $pagina = 10; |
“links_laterais” contém o número de links que serão mostrados, no máximo, antes e depois da página corrente. Esse valor corresponde à metade do valor de “max_links”. Usei ceil() para ter certeza de que será gerado um número inteiro. Se você sempre se lembrar de colocar um número par em “max_links”, pode retirar a função ceil(), reduzindo o trabalho do processador e o tempo de execução do script.
1 2 3 | // calcula quantos links haverá à esquerda e à direita da página corrente // usa-se ceil() para assegurar que o número será inteiro $links_laterais = ceil($max_links / 2); |
Aqui eu crio as variáveis que serão usadas no loop para gerar os links da paginação. É preferível criar essa variáveis em vez de declará-las denrto do loop. Caso contrário $limite seria calculado a cada iteração do laço ($inicio até poderia ser declarada dentro do for, pois só é calculada uma vez).
1 2 3 | // variáveis para o loop $inicio = $pagina - $links_laterais; $limite = $pagina + $links_laterais; |
Agora vem a parte que faz tudo aparecer. Não tem muito o que explicar. Os IF’s se explicam por si só.
Quando $i possui o valor da página corrente, o link não é gerado (até porque ninguém pretende ir para a página em que está. =P ). É necessário verificar se $i é maior que um e menor que o total de páginas, para que não sejam criados link inexistentes. Usei a página pagincao.php somente para exemplificar; mude-a para o nome do seu script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for ($i = $inicio; $i <= $limite; $i++) { if ($i == $pagina) { echo " <strong>" . $i . "</strong> "; } else { if ($i >= 1 && $i <= $total) { echo " <a href=\"paginacao.php?pagina=" . $i . "\">" . $i . "</a> "; } } } |
O script completo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php // total de páginas $total = 50; // número máximo de links da paginação $max_links = 10; // página corrente $pagina = 3; // calcula quantos links haverá à esquerda e à direita da página corrente // usa-se ceil() para assegurar que o número será inteiro $links_laterais = ceil($max_links / 2); // variáveis para o loop $inicio = $pagina - $links_laterais; $limite = $pagina + $links_laterais; for ($i = $inicio; $i <= $limite; $i++) { if ($i == $pagina) { echo " <strong>" . $i . "</strong> "; } else { if ($i >= 1 && $i <= $total) { echo " <a href=\"paginacao.php?pagina=" . $i . "\">" . $i . "</a> "; } } } ?> |